1089A - Alice the Fan - CodeForces Solution


dp *2200

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int a,b;

bool go3_0(){

    if(a<75) return 0;

    else if(a==75){

        if(b>=0&&b<=69){

            printf("3:0\n");

            for(int i=0;i<3;i++){

                int food=min(23,b);

                b-=food;

                printf("25:%d ",food);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-52&&b<=a-6){

            printf("3:0\n");

            printf("%d:%d ",a-50,a-52);

            b-=(a-52);

            for(int i=0;i<2;i++){

                int food=min(23,b);

                b-=food;

                printf("25:%d ",food);

            }

            return 1;

        }

        else return 0;

    }

}

bool go3_1(){

    if(a<75) return 0;

    else if(a>=75&&a<=98){

        if(b>=25&&b<=a+19){

            printf("3:1\n");

            if(b<=94){

                printf("%d:25 ",a-75);

                b-=25;

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

            }

            else{

                int x=b-25-23-23;

                printf("%d:25 ",a-25-25-x-2);

                printf("25:23 25:23 ");

                printf("%d:%d ",x+2,x);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-73&&b<=a+19){

            printf("3:1\n");

            if(b>=a-73&&b<=a-4){

                int x=a-75;

                printf("%d:%d ",x,x+2);

                b-=(x+2);

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

            }

            else{

                int y=b-25-23-23+2;

                printf("%d:25 ",a-50-y);

                printf("%d:%d ",y,y-2);

                printf("25:23 25:23 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go3_2(){

    if(a<65) return 0;

    else if(a>=65&&a<=111){

        if(b>=50&&b<=a+44){

            printf("3:2\n");

            if(b<=109){

                a-=65;

                b-=50;

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

                printf("15:%d ",b);

            }

            else{

                int x=b-50-46;

                a-=(x+2+50);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                printf("25:23 25:23 ");

                printf("%d:%d ",x+2,x);

            }

            return 1;

        }

        return 0;

    }

    else{

        if(b>=a-61&&b<=a+44){

            printf("3:2\n");

            if(b>=a-61&&b<=a-2){

                int x=a-23-25-25-15;

                printf("%d:%d ",x,x+2);

                printf("23:25 ");

                b-=(x+2+25);

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

                printf("15:%d ",b);

            }

            else{

                int y=b-50-36+2;

                a-=(y+40);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:%d ",y,y-2);

                printf("25:23 15:13 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go2_3(){

    swap(a,b);

    if(a<65) return 0;

    else if(a>=65&&a<=111){

        if(b>=50&&b<=a+44){

            printf("2:3\n");

            if(b<=109){

                a-=65;

                b-=50;

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:15 ",b);

            }

            else{

                int x=b-50-46;

                a-=(x+2+50);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                printf("23:25 23:25 ");

                printf("%d:%d ",x,x+2);

            }

            return 1;

        }

        return 0;

    }

    else{

        if(b>=a-61&&b<=a+44){

            printf("2:3\n");

            if(b>=a-61&&b<=a-2){

                int x=a-23-25-25-15;

                printf("%d:%d ",x+2,x);

                printf("25:23 ");

                b-=(x+2+25);

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:15 ",b);

            }

            else{

                int y=b-50-36+2;

                a-=(y+40);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                printf("%d:%d ",y-2,y);

                printf("23:25 13:15 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go1_3(){

    swap(a,b);

    if(a<75) return 0;

    else if(a>=75&&a<=98){

        if(b>=25&&b<=a+19){

            printf("1:3\n");

            if(b<=94){

                printf("25:%d ",a-75);

                b-=25;

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

            }

            else{

                int x=b-25-23-23;

                printf("25:%d ",a-25-25-x-2);

                printf("23:25 23:25 ");

                printf("%d:%d ",x,x+2);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-73&&b<=a+19){

            printf("1:3\n");

            if(b>=a-73&&b<=a-4){

                int x=a-75;

                printf("%d:%d ",x+2,x);

                b-=(x+2);

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

            }

            else{

                int y=b-25-23-23+2;

                printf("25:%d ",a-50-y);

                printf("%d:%d ",y-2,y);

                printf("23:25 23:25 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go0_3(){

    swap(a,b);

    if(a<75) return 0;

    else if(a==75){

        if(b>=0&&b<=69){

            printf("0:3\n");

            for(int i=0;i<3;i++){

                int food=min(23,b);

                b-=food;

                printf("%d:25 ",food);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-52&&b<=a-6){

            printf("0:3\n");

            printf("%d:%d ",a-52,a-50);

            b-=(a-52);

            for(int i=0;i<2;i++){

                int food=min(23,b);

                b-=food;

                printf("%d:25 ",food);

            }

            return 1;

        }

        else return 0;

    }

}

int main(){

    //freopen("a.in","r",stdin);

    //freopen("a.out","w",stdout);

    int T;

    cin>>T;

    while(T--){

        scanf("%d %d",&a,&b);

        int aa=a,bb=b;

        if(go3_0()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go3_1()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go3_2()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go2_3()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go1_3()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go0_3()) {printf("\n");continue;}

        a=aa;b=bb;

        printf("Impossible\n");

    }



    return 0;

}


Comments

Submit
0 Comments
More Questions

49A - Sleuth
1541A - Pretty Permutations
1632C - Strange Test
673A - Bear and Game
276A - Lunch Rush
1205A - Almost Equal
1020B - Badge
1353A - Most Unstable Array
770A - New Password
1646B - Quality vs Quantity
80A - Panoramix's Prediction
1354B - Ternary String
122B - Lucky Substring
266B - Queue at the School
1490A - Dense Array
1650B - DIV + MOD
1549B - Gregor and the Pawn Game
553A - Kyoya and Colored Balls
1364A - XXXXX
1499B - Binary Removals
1569C - Jury Meeting
108A - Palindromic Times
46A - Ball Game
114A - Cifera
776A - A Serial Killer
25B - Phone numbers
1633C - Kill the Monster
1611A - Make Even
1030B - Vasya and Cornfield
1631A - Min Max Swap